package com.project.dao.impl;

import com.project.bean.LinkBean;
import com.project.dao.ILinkDao;

import java.sql.*;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

/**
 * 通讯录接口实现类
 */
public class LinkDaoImpl implements ILinkDao {
    /**
     * 添加
     * @param linkBean 添加通讯录对象
     */
    @Override
    public void add(LinkBean linkBean) {

        Connection con = null; //创建链接对象
        PreparedStatement ps = null; //sql语句执行
        try {
            //        加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            //    建立链接  localhost（127.0.0.1:）表示链接数据库所在服务器的ip地址 12345为链接端口 db 表示链接的数据库名
            //    characterEncoding=utf-8 表示设置编码集
            //    root 表示等录mysql的用户名。  lovo表示登陆密码
            con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:12345/db?characterEncoding=utf-8",
                    "root","lovo");
            //    执行sql语句
            ps = con.prepareStatement(" insert into t_link(l_name,l_date,l_sex,l_phone)"+"values(?,?,?,?)");
//                填充占位符
            ps.setObject(1,linkBean.getName());
            ps.setObject(2,linkBean.getDate());
            ps.setObject(3,linkBean.getSex());
            ps.setObject(4,linkBean.getPhone());

//            更新数据库
            ps.executeUpdate();


        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
//                关闭链接
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }
    }

    /**
     * 删除
     * @param id 通讯录id
     */
    @Override
    public void del(int id) {

//       创建链接对象
        Connection con = null;
//       创建执行sql语句
        PreparedStatement ps = null;

        try {
//            加载链接
            Class.forName("com.mysql.jdbc.Driver");
//            链接数据库
            con = DriverManager.getConnection("jdbc:mysql://localhost:12345/db?characterEncoding=utf-8","root","lovo");
//            执行sql语句
            ps = con.prepareStatement("delete from t_link where pk_t_linkId=?");

//            占位
            ps.setObject(1,id);

            ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
//            关闭
            try {
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }

    }

    @Override
    public void update(int id, String phone) {
        //       创建链接对象
        Connection con = null;
//       创建执行sql语句
        PreparedStatement ps = null;
        try {
//            加载链接
            Class.forName("com.mysql.jdbc.Driver");
//            链接数据库
            con = DriverManager.getConnection("jdbc:mysql://localhost:12345/db?characterEncoding=utf-8","root","lovo");
//            执行sql语句
            ps = con.prepareStatement("update t_link set l_phone=? where pk_t_linkId=?");

            ps.setObject(1,phone);
            ps.setObject(2,id);

            ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
//            关闭
            try {
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }

    }
    /**
     * 查询所有通讯录
     * @return通讯录集合
     */
    @Override
    public List<LinkBean> findAll() {
        List<LinkBean> list = new ArrayList<>();
        Connection con = null;
        PreparedStatement ps =null;
//        结果集
        ResultSet rs = null;

        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:12345/db?characterEncoding=utf-8","root","lovo");
            ps = con.prepareStatement("select * from t_link");
//            刷新
            ps.executeQuery();
//            结果集
            rs = ps.executeQuery();
//            将结果集指针指向下一天记录，返回真，如果没有返回假，遍历结束。
            while (rs.next()){
                    LinkBean linkObj = new LinkBean();
                    linkObj.setId(rs.getInt("pk_t_linkId"));
                    linkObj.setName(rs.getString("l_name"));
                    linkObj.setDate(LocalDate.parse(rs.getString("l_date")));
                    linkObj.setSex(rs.getString("l_sex"));
                    linkObj.setPhone(rs.getString("l_phone"));
                    list.add(linkObj);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                rs.close();
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        return list;
    }
    /**
     * 按ID查询联系人
     * @param id 联系人id
     * @return 联系人对象
     */
    @Override
    public LinkBean findById(int id) {
        Connection con = null;
        PreparedStatement ps =null;
        LinkBean linkObj = new LinkBean();
//        结果集
        ResultSet rs = null;

        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:12345/db?characterEncoding=utf-8","root","lovo");
            ps = con.prepareStatement("select * from t_link where pk_t_linkId=?");

            ps.setObject(1,id);
//            刷新
            ps.executeQuery();

//            结果集
            rs = ps.executeQuery();

//            将结果集指针指向下一天记录，返回真，如果没有返回假，遍历结束。
            while (rs.next()) {
                linkObj.setId(id);
                linkObj.setName(rs.getString("l_name"));
                linkObj.setDate(LocalDate.parse(rs.getString("l_date")));
                linkObj.setSex(rs.getString("l_sex"));
                linkObj.setPhone(rs.getString("l_phone"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                rs.close();
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        return linkObj;

    }
    /**
     * 按姓名查询联系人
     * @param name 联系人姓名
     * @return  联系人集合
     */
    @Override
    public List<LinkBean> findByName(String name) {
        List<LinkBean> list = new ArrayList<>();
        Connection con = null;
        PreparedStatement ps =null;
//        结果集
        ResultSet rs = null;

        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:12345/db?characterEncoding=utf-8","root","lovo");
            ps = con.prepareStatement("select * from t_link where l_name like ?");
            String s = "%"+name+"%";
            ps.setObject(1,s);
//            刷新
            ps.executeQuery();

//            结果集
            rs = ps.executeQuery();
//            将结果集指针指向下一天记录，返回真，如果没有返回假，遍历结束。
            while (rs.next()){
                LinkBean linkObj = new LinkBean();
                linkObj.setId(rs.getInt("pk_t_linkId"));
                linkObj.setName(rs.getString("l_name"));
                linkObj.setDate(LocalDate.parse(rs.getString("l_date")));
                linkObj.setSex(rs.getString("l_sex"));
                linkObj.setPhone(rs.getString("l_phone"));
                list.add(linkObj);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                rs.close();
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        return list;

    }


    public static void main(String[] args) {
        ILinkDao dao = new LinkDaoImpl();
//        dao.add(new LinkBean("郑寿",LocalDate.parse("1994-05-03"),"男" ,"18402888571"));
//        dao.del(5);
//        dao.update(4,"18488888889");
       ;
//        System.out.println( dao.findAll());
//        System.out.println(dao.findById(2));
        System.out.println(dao.findByName("张"));

    }
}
